//题目描述：
//AcWing 802.区间和的题目描述如下：

// 题目背景：

// 假定有一个无限长的数轴，数轴上每个坐标上的数都是0。现在进行一系列操作，这些操作分为两部分：

// 首先进行n次操作，每次操作将某一位置x上的数加c。
// 接下来进行m次询问，每个询问包含两个整数l和r，要求求出在区间[l, r]之间的所有数的和。
// 输入格式：

// 第一行包含两个整数n和m，分别表示操作次数和询问次数。
// 接下来n行，每行包含两个整数x和c，表示将位置x上的数加c。
// 再接下来m行，每行包含两个整数l和r，表示询问区间[l, r]内的所有数的和。
// 输出格式：

// 对于每个询问，输出一行，包含一个整数，表示在指定区间内的所有数的和。
// 数据范围：

// −109
// 1 ≤ n, m ≤ 10^5
// −10000 ≤ c ≤ 10000

#include <iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;  
  
typedef pair<int, int> PII;  
const int N = 300010; // 开30万是因为离散化后插入操作最多10万个下标,查询操作最多有20万个下标(一次查询有两个下标:l,r)所以加起来最对会用到30万个下标  
  
int n, m;  
int a[N], s[N]; // a数组是离散化后的数组,s数组是a数组的前缀和数组  
vector<int> alls; // alls存的是所有要离散化的位置:x,l,r(实际上就是将下标离散化)  
vector<PII> add, query; // add用于存要加的数的位置x和值c,query用于存需要访问的区间左右端点下标:l,r  
  
// find函数用于求x离散化后的结果(用二分快速找到x对应的离散化的值)  
int find(int x) {  
    int l = 0, r = alls.size() - 1;  
    while (l < r) {  
        int mid = l + r >> 1;  
        if (alls[mid] >= x) r = mid;  
        else l = mid + 1;  
    }  
    return r + 1; // “+1”是为了映射到1,2,...n(下标从1开始,因为本题要用到前缀和,而前缀和下标从1开始比较好做)  
}  
  
int main() {  
    cin >> n >> m;  
    for (int i = 0; i < n; i++) {  
        int x, c;  
        cin >> x >> c;  
        add.push_back({x, c});  
        alls.push_back(x);  
    }  
    for (int i = 0; i < m; i++) {  
        int l, r;  
        cin >> l >> r;  
        query.push_back({l, r});  
        alls.push_back(l);  
        alls.push_back(r);  
    }  
      
    // 去重(附赠一个排序)  
    sort(alls.begin(), alls.end());  
    alls.erase(unique(alls.begin(), alls.end()), alls.end());  
      
    // 处理插入  
    for (int i = 0; i < add.size(); i++) {  
        int x = find(add[i].first); // add[i].first(即x)为要加数字的位置  
        a[x] += add[i].second; // add[i].second为要加的数字的值  
    }  
      
    // 预处理前缀和  
    for (int i = 1; i <= alls.size(); i++) s[i] = s[i - 1] + a[i];  
      
    // 处理询问  
    for (int i = 0; i < query.size(); i++) {  
        int l = find(query[i].first), r = find(query[i].second); // l是离散化后左端点的值,r是离散化后右端点的值  
        cout << s[r] - s[l - 1] << endl;  
    }  
      
    return 0;  
}